home *** CD-ROM | disk | FTP | other *** search
/ Borland JBuilder 6 / jbuilder6.iso / IBM VisualAge for Java Enterprise v4.0 Retail / ivj40 / setup / IDE.Cab / F77292_TreeViewer.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-25  |  6.8 KB  |  204 lines

  1. package com.ibm.ivb.jface.plus;
  2.  
  3. import com.ibm.ivb.jface.Action;
  4. import com.ibm.ivb.jface.MenuComponentData;
  5. import com.ibm.ivb.jface.MenuData;
  6. import com.ibm.ivb.jface.MenuItemData;
  7. import com.ibm.ivb.jface.NullEvent;
  8. import com.ibm.ivb.jface.Tool;
  9. import com.ibm.ivf.ui.browser.interfaces.IElement;
  10. import com.ibm.ivf.ui.browser.interfaces.IIndexedProperty;
  11. import com.ibm.ivf.ui.browser.interfaces.IProperty;
  12. import java.awt.Component;
  13. import java.awt.Point;
  14. import java.awt.Rectangle;
  15. import javax.swing.JScrollPane;
  16. import javax.swing.JTree;
  17. import javax.swing.tree.TreeModel;
  18. import javax.swing.tree.TreePath;
  19.  
  20. public class TreeViewer extends ToolViewer {
  21.    private static final String fgIBMCopyright = "(c) Copyright IBM Corporation 1998";
  22.    protected JScrollPane scrollPane;
  23.    protected JTree tree = this.createTree();
  24.    protected static TreeModelAdapter emptyModel = null;
  25.    protected String childrenPropertyName = "children";
  26.    protected ToolViewer.PopupListener popupListener;
  27.  
  28.    public TreeViewer() {
  29.       JTree var10000 = this.tree;
  30.       this.getClass();
  31.       ((Component)var10000).addMouseListener(new ToolViewer.PopupListener(this));
  32.       this.tree.setModel(emptyModel);
  33.       this.tree.setCellRenderer(new MyTreeCellRenderer(this));
  34.       this.tree.setRootVisible(false);
  35.       this.tree.setShowsRootHandles(true);
  36.       this.tree.setLargeModel(true);
  37.       this.tree.addTreeSelectionListener(new TreeListener(this));
  38.       this.tree.putClientProperty("JTree.lineStyle", "Angled");
  39.    }
  40.  
  41.    protected JTree createTree() {
  42.       return new JTree();
  43.    }
  44.  
  45.    protected TreeModel createTreeModel(IElement var1, IProperty var2, String var3) {
  46.       return new TreeModelAdapter(var1, (IIndexedProperty)var2, var3);
  47.    }
  48.  
  49.    public void domainChanged(IElement var1, String var2, IElement var3) {
  50.       if (var1 == null) {
  51.          ((ToolViewer)this).updateInput(((ToolViewer)this).getCurrentElement());
  52.       } else if (var3 != null && var3 == ((ToolViewer)this).getCurrentElement()) {
  53.          ((ToolViewer)this).updateInput(((ToolViewer)this).getCurrentElement());
  54.       } else {
  55.          if (var2 == null || var2.equals(((ToolViewer)this).getCurrentPropertyName()) || var2.equals(this.childrenPropertyName) || var2.equals("name") || var2.equals("icon")) {
  56.             TreeModelAdapter var4 = (TreeModelAdapter)this.tree.getModel();
  57.             boolean var5 = false;
  58.             Object var6 = null;
  59.             TreePath var7;
  60.             if (var1 != var4.getRoot()) {
  61.                var7 = this.findVisible(new TreePath(var4.getRoot()), var1);
  62.                if (var7 != null) {
  63.                   var4.treeNodeChanged(var7, var3);
  64.                   var5 = true;
  65.                }
  66.             } else {
  67.                var7 = new TreePath(var1);
  68.                var4.treeNodeChanged(var7, var3);
  69.                if (var2.equals("name") || var2.equals("icon")) {
  70.                   ((Tool)this).setTitleIcon(var1.getIcon());
  71.                   ((Tool)this).setTitle(var1.getName());
  72.                }
  73.  
  74.                var5 = true;
  75.             }
  76.  
  77.             if (var5) {
  78.                if (var3 != null && !var3.isDeleted()) {
  79.                   this.tree.expandPath(this.makeNewPath(var7, var3));
  80.                }
  81.  
  82.                this.tree.repaint();
  83.             }
  84.          }
  85.  
  86.       }
  87.    }
  88.  
  89.    public TreePath findVisible(TreePath var1, IElement var2) {
  90.       try {
  91.          if (!this.tree.isVisible(var1)) {
  92.             return null;
  93.          }
  94.       } catch (NullPointerException var9) {
  95.       }
  96.  
  97.       Object var3 = var1.getLastPathComponent();
  98.       if (var3.equals(var2)) {
  99.          return var1;
  100.       } else if (!this.tree.isExpanded(var1)) {
  101.          return null;
  102.       } else {
  103.          TreeModelAdapter var4 = (TreeModelAdapter)this.tree.getModel();
  104.          int var5 = var4.getChildCount(var3);
  105.          Object[] var6 = new Object[var1.getPathCount() + 1];
  106.          System.arraycopy(var1.getPath(), 0, var6, 0, var6.length - 1);
  107.  
  108.          for(int var7 = 0; var7 < var5; ++var7) {
  109.             var6[var6.length - 1] = var4.getChild(var3, var7);
  110.             TreePath var8 = this.findVisible(new TreePath(var6), var2);
  111.             if (var8 != null) {
  112.                return var8;
  113.             }
  114.          }
  115.  
  116.          return null;
  117.       }
  118.    }
  119.  
  120.    public Component getPrintableView() {
  121.       return this.tree;
  122.    }
  123.  
  124.    public Component getView() {
  125.       return ((ToolViewer)this).createScrollPane(this.tree);
  126.    }
  127.  
  128.    public void inputChanged(IElement var1, IProperty var2) {
  129.       if (var1 == null) {
  130.          this.tree.setModel(emptyModel);
  131.          ((Tool)this).fireLinkEvent(new NullEvent(this));
  132.       } else {
  133.          this.tree.setModel(this.createTreeModel(var1, var2, this.childrenPropertyName));
  134.       }
  135.  
  136.       this.tree.invalidate();
  137.       this.tree.validate();
  138.       this.tree.repaint();
  139.    }
  140.  
  141.    void internalToolInstalled() {
  142.       String var1 = (String)((Tool)this).getParameter("children");
  143.       if (var1 != null) {
  144.          this.childrenPropertyName = var1;
  145.       }
  146.  
  147.    }
  148.  
  149.    private boolean isClickOnCanvas(Point var1) {
  150.       int var2 = this.tree.getClosestRowForLocation(var1.x, var1.y);
  151.       if (var2 == -1) {
  152.          return true;
  153.       } else {
  154.          Rectangle var3 = this.tree.getRowBounds(var2);
  155.          if (var3 != null && var3.contains(var1)) {
  156.             int[] var4 = this.tree.getSelectionRows();
  157.  
  158.             for(int var5 = 0; var4 != null && var5 < var4.length; ++var5) {
  159.                if (var4[var5] == var2) {
  160.                   return false;
  161.                }
  162.             }
  163.  
  164.             return true;
  165.          } else {
  166.             return true;
  167.          }
  168.       }
  169.    }
  170.  
  171.    private void linkToolAndActions(MenuData var1) {
  172.       for(int var2 = 0; var2 < var1.getMenuItemCount(); ++var2) {
  173.          MenuComponentData var3 = var1.getMenuItemAt(var2);
  174.          if (var3 instanceof MenuData) {
  175.             this.linkToolAndActions((MenuData)var3);
  176.          } else if (var3 instanceof MenuItemData) {
  177.             MenuItemData var4 = (MenuItemData)var3;
  178.             Action var5 = var4.getAction();
  179.             if (var5 != null) {
  180.                var5.setTool(this);
  181.             }
  182.          }
  183.       }
  184.  
  185.    }
  186.  
  187.    private TreePath makeNewPath(TreePath var1, IElement var2) {
  188.       Object[] var3 = new Object[var1.getPathCount() + 1];
  189.       System.arraycopy(var1.getPath(), 0, var3, 0, var3.length - 1);
  190.       var3[var3.length - 1] = var2;
  191.       return new TreePath(var3);
  192.    }
  193.  
  194.    // $FF: synthetic method
  195.    static boolean access$0(TreeViewer var0, Point var1) {
  196.       return var0.isClickOnCanvas(var1);
  197.    }
  198.  
  199.    // $FF: synthetic method
  200.    static void access$1(TreeViewer var0, MenuData var1) {
  201.       var0.linkToolAndActions(var1);
  202.    }
  203. }
  204.